package com.One;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Proxy;


/**
 * @ClassName ShowMeBug
 * @date 2021/4/26 9:59
 * @Version 1.0
 * @Description //来未来题目一
 * @USER root
 */
public class ShowMeBug {


    public static void main(String[] args) throws Exception {
        IA ia = (IA) createObject(IA.class.getName()+"$getHelloName=Abc");
//        System.out.println(ia.getHelloName()); //方法名匹配的时候，输出“Abc”
//        ia = (IA) createObject(IA.class.getName()+"$getTest=Bcd");
//        System.out.println(ia.getHelloName()); //方法名不匹配的时候，输出null

    }
    //请实现方法createObject，接口中"getName()"方法名仅仅是个示例，不能写死判断

    public static Object createObject(String str) throws Exception {
//        throw new Exception("还没有实现的方法");
//        String[] s = str.split("\\$");
//        String interfaceName = s[0].trim();
//        String methodName = s[1].split("=")[0].trim();
//        String value = s[1].split("=")[1].trim();
//        return
//                Proxy.newProxyInstance(
//                        Class.forName(interfaceName).getClassLoader(),
//                        new Class[]{Class.forName(interfaceName)},
//                ((proxy, method, args) -> {
//                    if (method.getName().equals(methodName)) {
//                        return value;
//                    } else {
//                        return null;
//                    }
//                }));
        String[] split = str.split("\\$");
        //按照$符号分割
        String path = split[0];
//        path = path.startsWith("com",)
        String[] split1 = split[1].split("=");
        String methodNameStr = split1[0];
        String soutStr = split1[1];

        Class IaClass = Class.forName(path);
        Class componentType = IaClass.getComponentType();
        System.out.println(componentType);

        Method[] methods = IaClass.getMethods();
        for(Method method:methods) {
            boolean aPublic = Modifier.isPublic(method.getModifiers());
            System.out.println(aPublic);

        }
        return null;
    }

}
